
/*
? Promise.finally() 方法用于指定不管 Promise 对象最后状态如何，都会执行的操作。
? 该方法接受一个回调函数作为参数，该回调函数在 Promise 对象状态确定后（即 resolved 或 rejected）,执行的操作与 finally 方法无关，
? 反之该 Promise 对象的状态没有改变时，它的回调函数不会执行。

? Promise.finally()  方法返回的仍然是一个 Promise 对象，所以它可以继续链式调用。
? 如果在  finally  方法中返回一个新的 Promise 对象(finally本身不返回值)，则会等待该 Promise 对象返回后，再继续执行后面的代码。
 */
//? 它接受一个回调函数  callback  作为参数，该回调函数将在  Promise  对象状态确定后执行。
//? 无论  Promise  对象的状态是  resolved  还是  rejected ，该回调函数都会被执行。
Promise.prototype.myFinally2 = function (callback) {
    return this.then(
        (value) => {
            callback() //? 执行finally里的回调函数
            return value //? finally本质起传递的作用,继续把值往下传，这里的value是上一个then函数的返回值
        },
        (error) => {
            callback()
            throw error
        }
    )
}
function asyncFunc() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('s!');
        }, 1000);
    });
}

asyncFunc()
    .myFinally2(() => { //? finally收不到任何参数
        console.log('finally has been executed');
        return 123 //? return不起作用 在finally里面就已经return了
    })
    //? 然后这里再调用then时 会用到上面finally的结果，而finally的结果就是里面回调函数执行后return的不改变value的Promise
    .then((value) => {
        console.log(value);
    })
    .catch((error) => {
        console.error(error);
    })

Promise.resolve(3)
    .myFinally2(() => { //? finally收不到任何参数
        console.log('finally has been executed');
        return 123 //? return不起作用 在finally里面就已经return了
    })
    //? 然后这里再调用then时 会用到上面finally的结果，而finally的结果就是里面回调函数执行后return的不改变value的Promise
    .then((value) => {
        console.log(value);
    })
    .catch((error) => {
        console.error(error);
    })
